<?php
/*
 * Capa Paciente DAL
 * @Autor: Andrés Ubilla
 */
class PacienteDAL {

    public static function grabar($oPaciente) {
        try {
            $arr = array(
                "{#ID}" => $oPaciente->getId(),
                "{#RUT}" => $oPaciente->getRut(),
                "{#EMAIL}" => $oPaciente->getEmail(),
                "{#NOMBRE}" => $oPaciente->getNombre(),
                "{#APELLIDO}" => $oPaciente->getApellido(),
                "{#SEXO}" => $oPaciente->getSexo(),
                "{#TELEFONO}" => $oPaciente->getTelefono(),
                "{#PASSWORD}" => $oPaciente->getPassword(),
                "{#FECHANACIMIENTO}" => $oPaciente->getFechaNacimiento(),
                "{#ACTIVIDAD}" => $oPaciente->getActividad(),
                "{#IMAGEN}" => $oPaciente->getImagen(),
                "{#ESTADO}" => $oPaciente->getEstado()
            );
            $query = Util::getQuery($arr, PacienteSQL::$REGISTRAR_PACIENTE);
            $arrDatos = Bd::exec($query);
            $id = Bd::$IDENTITY;
            
            return $id;
        } catch (Exception $e) {
            throw new Exception($e->getMessage());
        }
    }
    
    public static function editar($oPaciente) {
        try {
            $arr = array(
                "{#ID}" => $oPaciente->getId(),
                "{#RUT}" => $oPaciente->getRut(),
                "{#EMAIL}" => $oPaciente->getEmail(),
                "{#NOMBRE}" => $oPaciente->getNombre(),
                "{#APELLIDO}" => $oPaciente->getApellido(),
                "{#SEXO}" => $oPaciente->getSexo(),
                "{#TELEFONO}" => $oPaciente->getTelefono(),
                "{#PASSWORD}" => $oPaciente->getPassword(),             
                "{#FECHANACIMIENTO}" => $oPaciente->getFechaNacimiento(),
                "{#ACTIVIDAD}" => $oPaciente->getActividad(),
                "{#IMAGEN}" => $oPaciente->getImagen(),
                "{#ESTADO}" => $oPaciente->getEstado()
            );
            $query = Util::getQuery($arr, PacienteSQL::$EDITAR_PACIENTE);
            $arrDatos = Bd::exec($query);
            
        } catch (Exception $e) {
            throw new Exception($e->getMessage());
        }
    }

    public static function grabarDatosMinimos($oPaciente) {
        try {
            $arr = array(
                "{#RUT}" => $oPaciente->getRut(),
                "{#EMAIL}" => $oPaciente->getEmail(),
                "{#NOMBRE}" => $oPaciente->getNombre(),
                "{#APELLIDO}" => $oPaciente->getApellido(),
                "{#TELEFONO}" => $oPaciente->getTelefono()
            );
            $query = Util::getQuery($arr, PacienteSQL::$REGISTRAR_PACIENTE_DATOS_MINIMOS);            
            $arrDatos = Bd::exec($query);
            return Bd::$IDENTITY;
        } catch (Exception $e) {
            throw new Exception($e->getMessage());
        }
    }

    public static function listar($oPaciente) {
        try {

            $arr = array(
                "{#ID}" => $oPaciente->getId(),
                "{#RUT}" => $oPaciente->getRut(),
                "{#EMAIL}" => $oPaciente->getEmail(),
                "{#NOMBRE}" => $oPaciente->getNombre(),
                "{#APELLIDO}" => $oPaciente->getApellido(),
                "{#SEXO}" => $oPaciente->getSexo(),
                "{#TELEFONO}" => $oPaciente->getTelefono(),
                "{#FECHANACIMIENTO}" => $oPaciente->getFechaNacimiento(),
                "{#ACTIVIDAD}" => $oPaciente->getActividad(),
                "{#IMAGEN}" => $oPaciente->getImagen(),
                "{#ESTADO}" => $oPaciente->getEstado()
            );
            $query = Util::getQuery($arr, PacienteSQL::$LISTAR);
            $arrDatos = Bd::exec($query);
            $arrPaciente = array();

            if (count($arrDatos) > 0) {                
                foreach ($arrDatos as $row) {
                    $oPaciente = new Paciente();

                    $oPaciente->setId(is_null($row["id"]) ? 0 : $row["id"]);
                    $oPaciente->setRut(is_null($row["rut"]) ? "" : $row["rut"]);
                    $oPaciente->setEmail(is_null($row["email"]) ? "" : $row["email"]);
                    $oPaciente->setNombre(is_null($row["nombre"]) ? "" : $row["nombre"]);
                    $oPaciente->setApellido(is_null($row["apellido"]) ? "" : $row["apellido"]);
                    $oPaciente->setTelefono(is_null($row["telefono"]) ? "" : $row["telefono"]);
                    $oPaciente->setSexo(is_null($row["sexo"]) ? 0 : $row["sexo"]);
                    if ($oPaciente->getSexo() == 1) {
                        $oPaciente->setSexo("Masculino");
                    } else if ($oPaciente->getSexo() == 2) {
                        $oPaciente->setSexo("Femenino");
                    } else if ($oPaciente->getSexo() == 0){
                        $oPaciente->setSexo("");
                    }
                    $oPaciente->setFechaNacimiento(is_null(Util::fechaDateTimeANormal($row["fechaNacimiento"])) ? "" : Util::fechaDateTimeANormal($row["fechaNacimiento"]));
                    $oPaciente->setActividad(is_null($row["actividad"]) ? "" : $row["actividad"]);
                    $oPaciente->setImagen(is_null($row["imagen"]) ? "" : $row["imagen"]);
                    
                    $arrPaciente[] = $oPaciente;
                }
            }

            return $arrPaciente;
        } catch (Exception $e) {
            throw new Exception($e->getMessage());
        }
    }

    public static function eliminar($id) {
        try {
            $arr = array("{#ID}" => $id);
            $query = Util::getQuery($arr, PacienteSQL::$ELIMINAR);
            $arrDatos = Bd::exec($query);
        } catch (Exception $e) {
            throw new Exception($e->getMessage());
        }
    }

    public static function obtenerPorId($id) {
        try {

            $arr = array("{#ID}" => $id);
            $query = Util::getQuery($arr, PacienteSQL::$OBTENER_POR_ID);
            $arrDatos = Bd::exec($query);

            $oPaciente = new Paciente();

            if (count($arrDatos) > 0) {
                foreach ($arrDatos as $row) {
                    $oPaciente->setId(is_null($row['id']) ? 0 : $row['id']);
                    $oPaciente->setRut(is_null($row["rut"]) ? "" : $row["rut"]);
                    $oPaciente->setEmail(is_null($row["email"]) ? "" : $row["email"]);
                    $oPaciente->setNombre(is_null($row["nombre"]) ? "" : $row["nombre"]);
                    $oPaciente->setApellido(is_null($row["apellido"]) ? "" : $row["apellido"]);
                    $oPaciente->setTelefono(is_null($row["telefono"]) ? "" : $row["telefono"]);
                    $oPaciente->setSexo(is_null($row["sexo"]) ? 0 : $row["sexo"]);
                    if ($oPaciente->getSexo() == 1) {
                        $oPaciente->setSexo("Masculino");
                    } else if ($oPaciente->getSexo() == 2) {
                        $oPaciente->setSexo("Femenino");
                    } else if ($oPaciente->getSexo() == 0){
                        $oPaciente->setSexo("");
                    }
                    $oPaciente->setFechaNacimiento(is_null($row["fechaNacimiento"]) ? "" : $row["fechaNacimiento"]);
                    $oPaciente->setActividad(is_null($row["actividad"]) ? "" : $row["actividad"]);
                    $oPaciente->setImagen(is_null($row["imagen"]) ? "" : $row["imagen"]);
                }

                return $oPaciente;
            }
        } catch (Exception $e) {
            throw new Exception($e->getMessage());
        }
    }

    public static function obtenerPorBusqueda($consulta) {
        try {

            $arr = array("{#QUERY}" => $consulta);
            $query = Util::getQuery($arr, PacienteSQL::$OBTENER_POR_BUSQUEDA);
            $arrDatos = Bd::exec($query);

            $arrPaciente = array();

            if (count($arrDatos) > 0) {

                foreach ($arrDatos as $row) {
                    $oPaciente = new Paciente();

                    $oPaciente->setId(is_null($row['id']) ? 0 : $row['id']);
                    $oPaciente->setNombre(is_null($row["nombre"]) ? "" : $row["nombre"]);
                        
                    $arrPaciente[] = $oPaciente;
                }

                return $arrPaciente;
            } else {
                $oPaciente = new Paciente();

                $oPaciente->setId(0);
                $oPaciente->setNombre("No se encuentran pacientes en la busqueda.");

                $arrPaciente[] = $oPaciente;

                return $arrPaciente;
            }
        } catch (Exception $e) {
            throw new Exception($e->getMessage());
        }
    }
}
?>